// 完成状态的基本定义。
// 对DataManager.isDatabaseLoaded进行操作，引入状态标签<ATB Cannot Move>。
let SWDA_ATBCannotMove = {};
SWDA_ATBCannotMove._loaded = false;
SWDA_ATBCannotMove.DATABASE_LOADED = DataManager.isDatabaseLoaded;
DataManager.isDatabaseLoaded = function(){
	if (!SWDA_ATBCannotMove.DATABASE_LOADED.call(this))
		return false;
	if(!SWDA_ATBCannotMove._loaded){
		SWDA_ATBCannotMove.loadStateAtbCannotMove();
		SWDA_ATBCannotMove._loaded = true;
	}
	return true;
};

//ATB Can Move 状态基本定义
SWDA_ATBCannotMove.loadStateAtbCannotMove = function(){
	for(var i =1; i<$dataStates.length; i++){
		var state = $dataStates[i];
		state.atbCanMove = true;
		if(state.meta["ATB Cannot Move"])
			state.atbCanMove = false;
	}
};

// 人物行动控制
// 人物的行动控制包括，物品技能的可用性及读条到头时的开始输入和开始吟唱的处理工作，原则是开始输入和吟唱时，直接重置ATB读条到初始状态。

//判断 ATB Can Move
Game_BattlerBase.prototype.atbCanMove = function(){
	var states = this.states();
	for(var i = 0; i < states.length; i++){
		var state = states[i];
		if(!state.atbCanMove)
			return false;
	}

	return true;
};


// 如果角色【不能动】，不可以执行任何行动
SWDA_ATBCannotMove.ITEM_CAN_USE = Game_BattlerBase.prototype.canUse;
Game_BattlerBase.prototype.canUse = function(item){
	if(!this.atbCanMove())
		return false;
	else
		return SWDA_ATBCannotMove.ITEM_CAN_USE.call(this, item);
};

// 启动读条吟唱时的函数，主要影响已经有行动的
SWDA_ATBCannotMove.SETUP_BATTLER_CHARGE = Game_Battler.prototype.setupATBCharge;
Game_Battler.prototype.setupATBCharge = function(){
	if(!this.atbCanMove()){
		this.resetAllATB(); //清除当前行动，重置行动条
		this.onAllActionsEnd(); //处理行动结束，包括状态和buff
		this.endTurnAllATB(); //角色回合结束
		this.increaseSelfTurnCount(); //YEP战斗核心 个人回合上升
	}else
        SWDA_ATBCannotMove.SETUP_BATTLER_CHARGE.call(this);
};



// 被定身后走条满，重置
SWDA_ATBCannotMove.START_BATTLE_ATB_INPUT = BattleManager.startATBInput;
BattleManager.startATBInput = function(battler){
	if(battler.atbCanMove())
    SWDA_ATBCannotMove.START_BATTLE_ATB_INPUT.call(this, battler);
	else{
        //此时执行行动会失败，结束行动，个人回合数+1
		this.startATBAction(battler);
		battler.increaseSelfTurnCount();
	}
};